package _Banque._TUA;

import _Banque.Banque;
import _Banque.CompteEpargne;
import _Banque.Titulaire;
import _Exception.BUException;
import _Exception.IPException;
import _Tests.Tests;

public class T_CompteEpargne_A1 {
	
	 @SuppressWarnings("unused")
	public static void main (String[] args) throws Throwable {
		 
		 Tests.Begin("_Banque.OperationBancaire", "V1.1.0");
		 
		 Banque b = new Banque();
		 	String adresse_1= "Imm. Les Magnolias Bat. 2, 8 Bd Napoleon III - NICE (06000)";
		 	String adresse_2= "Villa Beau Sejour, 115 Av. de la Grande Armee - PARIS (75000)";

		 	Titulaire dupuy = new Titulaire("DUPUY", "melanie", "1978/04/25", adresse_1);
		 	Titulaire durand = new Titulaire("Durand", "Paul", "1981/01/03",  adresse_2);
		 	
		 	Tests.Design("Controle des anomalies de construction", 3); {
		 	
		 		int compteur= 0;
		    
		         Tests.Case("Duplication d'un element neutre"); {
		         CompteEpargne neutre = new CompteEpargne();
	
		            try {
		            	CompteEpargne clone = (CompteEpargne)neutre.clone();
		            	}
		            catch (CloneNotSupportedException e) {  
		            
		               Tests.Unit("java.lang.CloneNotSupportedException", e.toString()); compteur++;
		            }
		         }
		         
		         Tests.Case("Duplication d'un element quelconque"); {
		             CompteEpargne cpt = new CompteEpargne(b, durand, 0.05f);

		                try {
		                	CompteEpargne clone = (CompteEpargne)cpt.clone();
		                	}
		                catch (CloneNotSupportedException e) {  
		                	
		                   Tests.Unit("java.lang.CloneNotSupportedException", e.toString()); compteur++;
		                }
		             }
		         
		         Tests.Case("Validite premier parametre"); {
		             CompteEpargne cpt = new CompteEpargne(b, dupuy, 0.05f);

		                try {
		                	cpt.executer('X',"xxx", 100.0f);
		                	}
		                catch (IPException e) {  
		                	
		                   Tests.Unit("2.1 : Parametre numero 1 invalide.\n" + 
		                		   "Raison : Type d'operation incorrect\n", e.toString()); compteur++;
		                }
		             }
		         
		         Tests.Case("Validite second parametre"); {
		             CompteEpargne cpt = new CompteEpargne(b, dupuy, 0.05f);

		                try {
		                	cpt.executer('V',null, 100.f);
		                	}
		                catch (IPException e) {  
		                   Tests.Unit(new IPException(2), e); compteur++;
		                }
		             }
		         
		         Tests.Case("Validite troisieme parametre"); {
		             CompteEpargne cpt = new CompteEpargne(b, dupuy, 0.05f);

		                try {
		                	cpt.executer('V',"xxx", -100.f);
		                	}
		                catch (IPException e) {  
		                   Tests.Unit(new IPException(3, "Montant negatif"), e); compteur++;
		                }
		             }
		         
		         Tests.Case("Validite d'un retrait"); {
		             CompteEpargne cpt = new CompteEpargne(b, dupuy, 0.05f);

		                cpt.executer('V', "xxxx", 100.f);

		                try {
		                	cpt.executer('R',"xxx", 200.f);
		                	}
		                catch (BUException e) {  
		                   Tests.Unit(new BUException("retrait impossible : solde insuffisant"), e); compteur++;
		                }
		             }
		         

		         Tests.Case("Validite d'un compte epargne"); {
		         CompteEpargne cpt = new CompteEpargne(b, dupuy, 0.05f);

		            cpt.executer('V', "xxxx", 100.f);

		            cpt.cloturer();

		            try {
		            	cpt.executer('V',"xxx", 200.f);
		            	}
		            catch (BUException e) {  
		               Tests.Unit(new BUException("Ne peut pas executer d'operation bancaire sur un compte cloture"), e); compteur++;
		            }
		         }
		         
		         Tests.Case("Synthese des controles d'anomalies"); {

		             Tests.Unit(7, compteur);
		          }
		         
		 	}
		 Tests.End();
	 }

}
